select the current focus row if nothing is selected and ctrl is not
authorKristian Rietveld <kris@gtk.org>
Sun, 28 May 2006 23:34:47 +0000 (23:34 +0000)
committerKristian Rietveld <kristian@src.gnome.org>
Sun, 28 May 2006 23:34:47 +0000 (23:34 +0000)
2006-05-29  Kristian Rietveld  <kris@gtk.org>

* gtk/gtktreeview.c (gtk_tree_view_move_cursor_up_down): select
the current focus row if nothing is selected and ctrl is not pressed.
(Fixes #324480, Murray Cumming/Srirama Sharma).

ChangeLog
ChangeLog.pre-2-10
gtk/gtktreeview.c

index 7396aa1b84a8eda91d9120a9d8a57cee312f763e..ec6b6542c5e0bfea28d1980ce0103777910e47e6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-05-29  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeview.c (gtk_tree_view_move_cursor_up_down): select
+       the current focus row if nothing is selected and ctrl is not pressed.
+       (Fixes #324480, Murray Cumming/Srirama Sharma).
+
 2006-05-28  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreeviewcolumn.c (_gtk_tree_view_column_cell_focus): refactor
index 7396aa1b84a8eda91d9120a9d8a57cee312f763e..ec6b6542c5e0bfea28d1980ce0103777910e47e6 100644 (file)
@@ -1,3 +1,9 @@
+2006-05-29  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeview.c (gtk_tree_view_move_cursor_up_down): select
+       the current focus row if nothing is selected and ctrl is not pressed.
+       (Fixes #324480, Murray Cumming/Srirama Sharma).
+
 2006-05-28  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtktreeviewcolumn.c (_gtk_tree_view_column_cell_focus): refactor
index 70d55373eec92a9baadc3e8c1df5867070031fcb..183f3b9248640bab577be114f8a30ce15d00cfb5 100644 (file)
@@ -8755,6 +8755,7 @@ static void
 gtk_tree_view_move_cursor_up_down (GtkTreeView *tree_view,
                                   gint         count)
 {
+  gint selection_count;
   GtkRBTree *cursor_tree = NULL;
   GtkRBNode *cursor_node = NULL;
   GtkRBTree *new_cursor_tree = NULL;
@@ -8777,12 +8778,23 @@ gtk_tree_view_move_cursor_up_down (GtkTreeView *tree_view,
   if (cursor_tree == NULL)
     /* FIXME: we lost the cursor; should we get the first? */
     return;
-  if (count == -1)
-    _gtk_rbtree_prev_full (cursor_tree, cursor_node,
-                          &new_cursor_tree, &new_cursor_node);
+
+  selection_count = gtk_tree_selection_count_selected_rows (tree_view->priv->selection);
+
+  if (selection_count == 0 && !tree_view->priv->ctrl_pressed)
+    {
+      new_cursor_tree = cursor_tree;
+      new_cursor_node = cursor_node;
+    }
   else
-    _gtk_rbtree_next_full (cursor_tree, cursor_node,
-                          &new_cursor_tree, &new_cursor_node);
+    {
+      if (count == -1)
+       _gtk_rbtree_prev_full (cursor_tree, cursor_node,
+                              &new_cursor_tree, &new_cursor_node);
+      else
+       _gtk_rbtree_next_full (cursor_tree, cursor_node,
+                              &new_cursor_tree, &new_cursor_node);
+    }
 
   /*
    * If the list has only one item and multi-selection is set then select